iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
  1. 第六章函數與遞迴,強調的是函式原型(function prototype)又稱為函式宣告(function declaration)會告知編譯氣函式的名稱, 回傳值型別, 參數數目, 參數型別還有最重要的順序,prototype或declaration跟definition的差別可以參考wiki提供的範例。
#include <stdio.h>
int MyFunction(int n);  /* Prototype or declaration */

int main( void )  /* Calling function */{
  printf("%d\n", MyFunction(6));  /* Error: forgot argument to MyFunction */
  return 0;
}

int MyFunction( int n )  /* Called function definition */{
  if (n == 0){
    return 1;
  }
  else{
    return n * MyFunction(n - 1);
  }
}
  1. 強制轉型(coercion of argument)提到在C++中類型眾多short, int , float, double, unsigned int, 下往上轉當然沒問題只是多花記憶體空間但上往下轉比如: double轉成int或轉成unsigned int就可能造成資料丟失問題。

  2. 一般說我們說bool類型的值非True即Flase,int類型的值介於-2,147,483,648 至 2,147,483,647,但我們也可以使用enum自行定義類型例如月份: enum Months { JAN=1, FEB, MAR, APR, MAY, JUN, AUG, SEP, OCT, NOV, DEC};

  3. 三個儲存關鍵字auto, register, static,函式中的變數預設是auto當函式存在時存在,函式結束時根據最小授權原則principle of privilege會自動收回記憶體空間,以現今的語言來說C++已經是運行時最快的但在一些追求極致速度的系統中例如:交易系統C++還有一個關鍵字register可將變數存放於CPU的暫存器(register)不僅增加讀取速度更節省變數在register與memory間的反覆傳輸,運算速度整個Level Up,當然CPU的暫存器是彌足珍貴的所以這是一種建議性質關鍵字當CPU的暫存器空間不足還是會被丟回memory。

  4. 預設情況下當函數生命週期結束變數也會跟著一起被回收,如果想要變數生存在整個程式執行的期間就可以使用全域變數(Global var),然全域變數是所有函數都可以讀取,全域變數滿天飛常常是造成問題的根源,比較好的方式對區域變數使用static關鍵字進行最小授權。值得注意的是static用在全域變數或函式名稱時有不同用意。

  5. 有句話說「遞迴(recurse)只應天上有,凡人該當用迴圈(iterate)」,確實比起迴圈遞迴的使用更加困難,但也有些好處

  • 節省記憶體空間
  • "通常"比較快
  • 但要小心遞迴次數免得stack overflow

反正像我這種凡人只有在研究所考試時寫河內塔, 求最大公因數等經典題目,工作後就很少遇到了就不多做介紹。


上一篇
Day9
下一篇
Days11
系列文
少年DevOps的C++奇怪漂流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言